
//验证公共组件

// 账号
let codeReg = /^(?![0-9]*$)(?![a-zA-Z]*$)[a-zA-Z0-9]{6,20}$/
// 电话下面有优化好的直接用
let inputphone = /^[1][3,4,5,6,7,8,9][0-9]{9}$/

// 必须为数字
let numberReg = /^\d+$|^\d+[.]?\d+$/
//验证颜色
var arg0=/^(\w[#]{1}\w*\s?)*$/g;
//验证零正整数
let numberReg1 = /^-?\d+\.?\d{0,2}$/ 
// 密码
let passwordReg = /^([A-Za-z0-9]){6,20}$/
let re = /^[1-9]\d*$/
let reOne = /^[0-9]\d*$/
//验证必须为6为的数字的密码
let sixnumberReg = /^\d{6}$/;;
// 联系人
let contactsReg = /^[\u0391-\uFFE5A-Za-z]+$/

let regId = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/

let emailReg = /^[A-Za-z\d]+([-_.][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,4}$/

let money = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/
//ip验证
var ip = /^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/

let FormValidate = (function () {
  function FormValidate () {}
  // From表单验证规则  可用于公用的校验部分
  FormValidate.Form = function () {
    return {
      // 账号的验证规则
      validateCode (rule, value, callback) {
        if (!value) {
          return callback(new Error('请输入账号'))
        }
        if (!codeReg.test(value)) {
          callback(new Error('账号必须为6-20位字母和数字组合'))
        } else {
          callback()
        }
      },

      // 只能数字的验证
      validateNumber (rule, value, callback) {
        if(!value){
          if (!numberReg.test(value)) {
            callback(new Error('必须为数字'))
          } else {
            callback()
          }
        }else{
          callback()
        }
          
      },

      // 只能ip的验证
      validateIp (rule, value, callback) {
        if(value !== ''){
          if (!ip.test(value)) {
            callback(new Error('请输入正确的ip'))
          } else {
            callback()
          }
        }else{
          callback(new Error())
        }
          
      },
    // 颜色
      validateNumber9 (rule, value, callback) {
        if (value !== '') {
          if (!arg0.test(value)) {
            callback(new Error('必须以#开头'))
          } else {
            callback()
          }
        } else {
          callback(new Error())
        }
      },
      //只能验证非零的整数
      validateNumber1 (rule, value, callback) {
        if(value==""){
          callback(new Error("请输入数字或两位小数"))
        }else{
            if (!numberReg1.test(value)) {
              callback(new Error('请输入数字或两位小数'))
            } else {
              callback()
            }
          }
      },
      validateNumber2 (rule, value, callback) {
        if (value !== '') {
          if (!re.test(value)) {
            callback(new Error('请输入非零整数'))
          } else {
            callback()
          }
        } else {
          callback(new Error("请输入非零整数"))
        }
      },
      validateNumber01 (rule, value, callback) {
        if (!value) {
          callback()
        }
          if (!reOne.test(value)) {
            callback(new Error('请输入数字'))
          } else {
            callback()
          }
      },
      //六位密码
      valisixNumber (rule, value, callback) {
        if (value !== '') {
          if (!sixnumberReg.test(value)) {
            callback(new Error('必须为六位数字'))
          } else {
            callback()
          }
        } else {
          callback()
        }
      },
      // 密码的验证
      validatePsdReg (rule, value, callback) {
        if (!value) {
          return callback(new Error('请输入密码'))
        }
        if (!passwordReg.test(value)) {
          callback(new Error('请输入6-20位英文字母、数字或者符号（除空格）'))
        } else {
          callback()
        }
      },

      // 联系人
      validateContacts (rule, value, callback) {
        if (!value) {
          return callback(new Error('请输入信息'))
        }
        if (!contactsReg.test(value)) {
          callback(new Error('不可输入特殊字符'))
        } else {
          callback()
        }
      },

      // 邮箱的验证规则
      validateEmail (rule, value, callback) {
        if (value !== '') {
          if (!emailReg.test(value)) {
            callback(new Error('邮箱格式不正确'))
          } else {
            callback()
          }
        } else {
          callback()
        }
      },

      // 电话号码的验证
      validatePhone (rule, value, callback) {
        if (!value) {
            return new Error("请输入电话号码");
          } else {
            const reg = /^1[3|4|5|7|8|9][0-9]\d{8}$/;
            const isPhone = reg.test(value);
            value = Number(value); //转换为数字
            if (typeof value === "number" && !isNaN(value)) {
              //判断是否为数字
              value = value.toString(); //转换成字符串
              if (value.length < 0 || value.length > 12 || !isPhone) {
                //判断是否为11位手机号
                callback(new Error("手机号码格式如:138xxxx8754"));
              } else {
                callback();
              }
            } else {
              callback(new Error("请输入电话号码"));
            }
          }
      },

      // 身份证的验证规则
      ID (rule, value, callback) {
        if (!value) {
          return callback(new Error('身份证不能为空'))
        }
        if (!regId.test(value)) {
          callback(new Error('请输入正确的二代身份证号码'))
        } else {
          callback()
        }
      },

      // 金额验证规则
      validateMoney(rule, value, callback) {
        if (!value) {
          return callback(new Error('请输入信息'))
        }
        if (!money.test(value)) {
          callback(new Error('请输入正确金额'))
        } else {
          callback()
        }
      }
    }
  }

  return FormValidate
}())

exports.FormValidate = FormValidate